# 1、写函数,将传入的列表或元祖对象的奇数位索引对应的元素,
# list1 = []
# def xxx(*aa):
#     for x in range(len(aa)):
#         if x%2 == 1:
#             list1.append(aa[x])
#         return list1
#
# print(xxx(1,2,3,4,5,6))
# #
# def lstt_(i):
#     return i[1::2]
# list1 = [1,2,3,4,5,77,"k","cywl"]
# print(lstt_(list1))

# 2、写函数,判断用户传入的对象(string,list,tuple)长度是否大于5

# def xxx(string,list,tuple):
#     list1 = [string,list,tuple]
#     for x in list1:
#         if len(x) > 5:
#             print(f"{x}的长度大于5")
#         else:
#             print(f"{x}的长度小于或等于5")
# string="qwertyuio"
# list=[1,2,3,4]
# tuple=(1,2,3,4,5)
# xxx(string,list,tuple)



# 3、写函数,计算传入的string中,数字,字母,空格以及其它内容的个数,并返回结果

# str1 = input("请输入字符串")
# def count():
#     a_num = 0
#     b_num = 0
#     for i in str1:
#         if i in "1234567890":
#           a_num += 1
#         elif (i >= "a" and i <= "z") or (i >= "A" and i <= "Z"):
#             b_num +=1
#     print(a_num)
#     print(b_num)
# count()


# 4、写函数,接收两个数字参数,返回较大的那个数字

# def xxx(a,b):
#     if a > b :
#         return a
#     elif a < b:
#         return b
# a = int(input("输入a:"))
# b = int(input("输入b:"))
# print(xxx(a,b))


# 5、编写一个函数cacluate, 可以接收任意多个数,返回的是一个元组.
# 元组的第一个值为所有参数的平均值, 第二个值是大于平均值的所有数.

# def calcluate(*a):
#     a = list(a)
#     avg = sum(a) / len(a)
#     a.insert(0, avg)
#     a.remove(max(a))
#     a.insert(1, max(a))
#     print(a)
# calcluate(1, 5, 7, 11, 10, 7)


# 6、编写一个函数, 接收字符串参数, 返回一个元组,
# 元组的第一个值为大写字母的个数, 第二个值为小写字母个数.

# def count_u(string):
#     upper_c = 0
#     lower_c = 0
#
#     for a in string:
#         if a.isupper():
#             upper_c += 1
#         elif a.islower():
#             lower_c += 1
#
#     return upper_c, lower_c
# result = count_u("Hellojhdia, Worlddada!")
# print(result)




# 7、编写函数, 接收一个列表(包含30个1~100之间的随机整形数)
# 和一个整形数k, 返回一个新列表.
# 函数需求:
# 将列表下标k之前对应(不包含k)的元素逆序;
# 将下标k及之后的元素逆序;






# 8、编写函数，从键盘输入参数x和n，计算并显示形如x+xx +xxx + xxxx + xxxxx+xxx…xxx+ 的表达式前n项的值

# def cal(x, n):
#     r = 0
#     c = x
#     for i in range(1, n + 1):
#         r += c
#         c = c * 10 + x
#     return r
# x = int(input("请输入x的值："))
# n = int(input("请输入n的值："))
# n_value = cal(x, n)
# print("表达式前", n, "项的值为：", n_value)




# 9、写函数,函数接收的4个参数分别是:姓名,性别(默认为男),年龄,地址
# 用户通过input输入这4个内容(支持持续输入,Q或q退出),并传递给函数
# 函数接收到这些内容,将其追加到student_msg文件中
# 重点:复习文件操作

# def k(name,age,diz,sex="男"):
#     print("姓名:", name)
#     print("性别:", sex)
#     print("年龄:", age)
#     print("地址:", diz)
# k("yys","99","冰岛")
#
# def process_information(name, age, diz, sex="男"):
#     path = './student_msg'
#     with open(path, "w", encoding='utf-8') as f:
#         f.write(name)
#         f.write(diz)
#         f.write(age)
#         f.write(sex)
# while True:
#     name = input("请输入姓名（输入Q或q退出）: ")
#     if name.lower() == 'q':
#         break
#     age = input("请输入年龄: ")
#     diz = input("请输入地址: ")
#     sex = input("请输入性别（直接回车，默认为男）: ")
#     if sex.lower() == 'q':
#         break
#     if sex == '':
#         process_information(name, age, diz)
#     else:
#         process_information(name, age, diz, sex)

# def write_student_msg():
#     while True:
#         name = input("请输入姓名")
#         if name == "q"or name == "Q":
#             break
#         sex = input("请输入性别")
#         if sex == "q"or sex == "Q":
#             break
#         if sex == "":
#             sex = "男"
#         age = input("请输入年龄")
#         if age == "q"or age == "Q":
#             break
#         address = input("请输入地址")
#         if address == "q"or address == "Q":
#             break
#         file_lines = f"姓名:{name},性别:{sex},年龄{age},地址:{address}"
#         with open('./student_msg','a',encoding='utf-8') as f:
#             f.write(file_lines+"\n")
# write_student_msg()

# 10、写函数,接收n个数字,返回这些数字的和(动态传参)

# def xxx(*n):
#     total = sum(n)
#     return total
# result = xxx(1,2,3,4,5,6,7,8,9,10)
# print(result)


# 11、在实参中传入多个可迭代对象(要有string,list,tuple,set,dict),
# 将每个对象的每个元素都加到args或kwargs里
# def add_elements(*args, **kwargs):
#     for iterable in args:
#         for element in iterable:
#             args += (element,)
#     for iterable in kwargs.values():
#         for element in iterable:
#             args += (element,)
#     return args
#
# my_string = "Hello"
# my_list = [1, 2, 3]
# my_tuple = (4, 5, 6)
# my_set = {7, 8, 9}
# my_dict = {'a': ['x', 'y', 'z'], 'b': [1, 2, 3]}
#
# result = add_elements(my_string, my_list, my_tuple, my_set, my_dict)
# print(result)





# 12、写函数,把传过来的列表中的每一个元素都用"_"拼接,并返回

# def xxx(a):
#     return '_'.join(a)
# list1 = ["adasd", "sss"]
# result = xxx(list1)
# print(result)


# 13、写函数,传入一个数字,返回这个数的阶乘
# 重点:累乘
# 示例：1x2x3....
# def xxx(num):
#     result = 1
#     for i in range(1, num + 1):
#         result *= i
#     return result
# print(xxx(5))





# 14、写函数,返回一个扑克牌列表,里面有52项,每一项都是一个tuple








# 15、用代码写一个99乘法表

# for i in range(1, 10):
#     for a in range(1, i+1):
#          ww = i * a
#          print(f"{a} x {i} = {ww}\t",end="")
#     print()


# 16、编写函数，求1+2+3+…N的和

# def xxx(N):
#     sum1 = 0
#     for i in range(1, N+1):
#         sum1 += i
#     return sum1
# N = int(input("输入N："))
# print("从1到N的和为:", xxx(N))


# 17、编写一个函数，求多个数中的最大值

# def xxx():
#     N =input("输入数据").split()
#     max_value = int(N[0])
#     for i in N :
#         if int(i) > max_value:
#             max_value = int(i)
#     return max_value
# print("最大值是:", xxx())


# 18、编写一个函数，提取指定字符串中所有的字母，然后拼接在一起产生一个新的字符串

# def xxx(str1):
#     str2 = ""
#     for a in str1:
#         b = ord(a)
#         if(65<=b<=90) or (97<=b<=122):
#             str2 += a
#     return str2
# str3 = "123456789efghjmgvuuajfni"
# print(xxx(str3))

# 19、 定义一个学生注册函数enroll()，打印学生姓名，性别，年龄，城市， 使用默认参数降低调用函数的复杂度






# 20、编写一个函数，接受一个字符串作为参数，并返回其中所有单词的首字母的大写形式






# 21、写一个函数，求多个数的平均值

# def xxx(*n):
#     if len(n) == 0:
#         return None
#     else:
#         average = sum(n) / len(n)
#     return average
# result = xxx(1,2,3,4,5,6,7)
# print("平均值为:", result)



# 22、写一个自己的len函数，统计指定序列中元素的个数

# def len1(xxx):
#     count = 0
#     for a in xxx:
#         count += 1
#     return count
# xxx = [1, 2, 3, 4, 5]
# result = len1(xxx)
# print("元素个数:", result)


# 23、找出传入的列表或元组的奇数位对应的元素，并返回一个新的列表







# 24、编写一个函数，接受一个字符串列表作为参数，并返回一个字符串，其中包含所有字符串首字母的大写形式






# 25、定义函数，有一个形参，传入的是列表，数组大小不超过 100个，
# 数组中的每个元素值不允许超过 100，但是可以等于100，
# 如果列表大小超过了100个截取到第100个为止，要求返回的列表格式：
# 删除所有重复元素，使得每个元素只出现一次
#  按照数字的大小，由高到低排序返回





# 26、定义函数 getLength，打印用户传入的容器类型和数据长度

# def getLength(i):
#     i_type = type(i).__name__
#     length = len(i)
#     print("容器类型：", i_type)
#     print("数据长度：", length)
# getLength("qwertyuiop")



# 27、定义函数 generateNum( )
# 返回从0~9的十个数字中随机取出4个不重复的数字组成一个字符串

# def xxx(*a):
#     a = set(a)
#     a = list(a)
#     str1 = ''
#     for i in range(len(a)):
#         if i < 4:
#             str1 += str(a[i])
#     print(str1)
#
# xxx(1, 2, 2, 3, 4, 5, 8, 9, 7)



# 28、定义函数 moreThan(num)，判断输入的数字是否大于1500

# def xxx(num):
#     if num > 1500:
#         return True
#     else:
#         return False
#
# print(xxx(2000))
# print(xxx(1000))
# print(xxx(1500))




# 29、定义函数，有两个形参，第一个形参到第二个形参的范围，所有平方数之和
# 示例：func_a(5,10)
# 5x5+6x6+7x7+8x8+9x9+10x10...





# 30、写函数，检查传入字典的每一个value长度，如果大于2，
# # 那么仅保留前两个长度的内容， 并将新内容返回给调用者







# 31、写函数，判断用户传入的对象（字符串、列表、元组）的元素是否为空







# 32、编写自定义函数，完成一个简单的减法运算函数
# def xxx(a,b):
#     return a-b
# result = xxx(9,5)
# print(result)


# 33、编写自定义函数，可以输出自己的名字即可。
# def xxx():
#     name = "JYL"
#     print("名字:",name)
# xxx()


# 34、编写自定义函数：剪刀石头布
# 游戏开始，初始状态下用户和电脑都有 100 分，赢一局+10 分，输一局-10 分。
# 当用户为 0 分时，游戏结束，提示游戏结束，比赛输了
# 当用户为 200 分时，游戏结束，提示游戏结束，赢得比赛、每轮比赛都输出当前的分数
# 1 代表剪刀 2 代表石头 3 代表布

import random


def rock_paper_scissors():
    user_score = 100
    computer_score = 100

    while user_score > 0 and user_score < 200:
        print("用户得分:", user_score)
        print("电脑得分:", computer_score)
        user_choice = int(input("请选择：剪刀(1)、石头(2)、布(3)："))

        if user_choice not in [1, 2, 3]:
            print("请输入有效选项!")
            continue
            computer_choice = random.randint(1, 3)

        print("用户选择:", user_choice)
        print("电脑选择:", computer_choice)

        if user_choice == computer_choice:
            print("平局！")
        elif (user_choice == 1 and computer_choice == 3) or \
                (user_choice == 2 and computer_choice == 1) or \
                (user_choice == 3 and computer_choice == 2):
            user_score += 10
            computer_score -= 10
            print("恭喜你，你赢了！")
        else:
            user_score -= 10
            computer_score += 10
            print("很遗憾，你输了！")

    if user_score >= 200:
        print("恭喜你，你赢得比赛！")
    else:
        print("很遗憾，你输了比赛！")



# 35、编写一个函数，接受一个字符串作为参数，并返回该字符串的逆序字符串

# def  xxx(str1):
#     return str1[::-1]
# str1 = input("输入一个字符串:")
# print(xxx(str1))

# 36、编写一个函数，接受一个数字列表作为参数，并返回其中所有偶数的列表

# list1=[1,2,3,45,65,76,7,98]
# def xxxx():
#     for i in list1:
#         if i % 2 == 0:
#             print(i)
#     return list1
# xxxx()


# 37、编写一个函数，接受一个字符串列表作为参数，并返回其中最长的字符串。

# list1 = ["ad","adddddddd","addd","adddd"]
# def xxx(list1):
#     max_long = ""
#     for i in list1:
#         if len(i) > len(max_long) :
#             max_long = i
#     return max_long
# print(xxx(list1))


# 38、编写一个函数，接受一个数字列表作为参数，并返回其中所有数字的平方的总和



# 39、编写一个函数，接受一个整数作为参数，并返回其阶乘
# def xxx(n):
#     if n < 0:
#         return None
#     elif n == 0 or n == 1:
#         return 1
#     else:
#         result = 1
#         for i in range(2, n + 1):
#             result *= i
#         return result
# n = 5
# result1 = xxx(n)
# print("结果为:", result1)